package com.huluobo.jetpackkotlindemo2006a.lifecycle

import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView
import androidx.appcompat.app.AppCompatActivity
import androidx.lifecycle.ViewModelProvider
import com.huluobo.jetpackkotlindemo2006a.livedata_viewmodel.AdViewModel
import com.huluobo.jetpackkotlindemo2006a.MainActivity
import com.huluobo.jetpackkotlindemo2006a.R

/**
 * Created by lc on 2023/2/10.
 * Lifecycle 总结:
 * 1.如果需要使用LifeCycle,首先需要时间一个接口:LifecycleObserver 让他可以去感知宿主的生命周期
 * 2.需要是一个宿主,LifeCycleOwner,一般来讲AppCompatActivity 已经实现了宿主的接口,可以直接使用
 * 3.通过LifeCycle.addObserver,来订阅观察者和宿主之间的关系
 * 4.可以有效解决在宿主中控制其他控件的生命周期,让观察者可以根据宿主的生命周期自行做出判断来调用某些方法(销毁或者创建)
 */
class AdActivity : AppCompatActivity() {
    //展示广告的时间,lateinit相当于声明一个空类型的变量,在赋值后可以形成对应的类型
    lateinit var time: TextView

    //跳过广告的按钮
    lateinit var go: Button

//    //计时时长,默认为5秒
//    var millisInFuture: Long = 5000

    companion object {
        const val TAG = "AdManager"

        const val KEY = "key"
    }

    lateinit var adViewModel: AdViewModel

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_ad)
        Log.i(TAG, "onCreate")

//        //当生命周期重启时,读取广告的秒数
//        savedInstanceState.let {
//            if (it != null) millisInFuture = it.getLong(KEY)
//        }
        adViewModel = ViewModelProvider(this).get(AdViewModel::class.java)

        time = findViewById(R.id.time)
        go = findViewById(R.id.btn_go)

        val adManager = AdManager(adViewModel)
        lifecycle.addObserver(adManager)
//        adManager.adManagerListener = object : AdManager.AdManagerListener {
//            override fun timing(second: Int) {
//                time.text = "广告剩余事件:${second}秒"
//                adViewModel.millisInFuture = second.toLong() * 1000
//            }
//
//            override fun enterMainActivity() {
//                val intent = Intent(this@AdActivity, MainActivity::class.java)
//                this@AdActivity.startActivity(intent)
//                this@AdActivity.finish()
//            }
//        }
        adViewModel._timingResult.observe(
            this,
            { t -> //因为在计时器中,会给timingResult赋值5次(5,4,3,2,1),所以在这个onChanged的毁掉中,会观测到5次的数据变化
                time.text = "广告剩余事件:${t}秒"
                if (t == 1L) {
                    val intent = Intent(this@AdActivity, MainActivity::class.java)
                    this@AdActivity.startActivity(intent)
                    this@AdActivity.finish()
                }
            })

        go.setOnClickListener {
            val intent = Intent(this@AdActivity, MainActivity::class.java)
            this@AdActivity.startActivity(intent)
            this@AdActivity.finish()
        }
    }

//    //当生命周期发生变化的时候,保存广告剩余的秒数
//    override fun onSaveInstanceState(outState: Bundle) {
//        super.onSaveInstanceState(outState)
//
//        outState.putLong(KEY, millisInFuture)
//    }

    override fun onStart() {
        super.onStart()
        Log.i(TAG, "onStart")
    }

    override fun onResume() {
        super.onResume()
        Log.i(TAG, "onResume")
    }

    override fun onRestart() {
        super.onRestart()
        Log.i(TAG, "onRestart")
    }

    override fun onPause() {
        super.onPause()
        Log.i(TAG, "onPause")
    }

    override fun onStop() {
        super.onStop()
        Log.i(TAG, "onStop")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.i(TAG, "onDestroy")
    }
}